package com.myapp.hibernate.util;

import com.myapp.hibernate.model.Entrada;
import java.util.ArrayList;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.Transaction;

public class EntradaUtil {

    private Session sesion;
    private Transaction tx;

    private void iniciaOperacion() throws HibernateException {
        sesion = HibernateUtil.getSessionFactory().openSession();
        tx = sesion.beginTransaction();
    }

    private void manejaExcepcion(HibernateException e) throws HibernateException {
        tx.rollback();
        throw new HibernateException("Ocurrió un error en la capa de acceso a datos. Entrada", e);
    }

    public Entrada obtenerEntrada(int idEntrada) throws HibernateException {
        Entrada e = new Entrada();
        try {
            iniciaOperacion();
            e = (Entrada) sesion.get(Entrada.class, idEntrada);
        } finally {
            sesion.close();
        }

        return e;
    }

    public ArrayList<Entrada> obtenerListaEntradas() throws HibernateException {
        ArrayList<Entrada> lista = new ArrayList<Entrada>();
        try {
            iniciaOperacion();
            lista = (ArrayList<Entrada>) sesion.createQuery("from Entrada").list();
        } finally {
            sesion.close();
        }
        return lista;
    }

    public ArrayList<Entrada> obtenerListaEntradasPorUsuario(int idUsuario) throws HibernateException {
        ArrayList<Entrada> lista = new ArrayList<Entrada>();
        try {
            iniciaOperacion();
            lista = (ArrayList<Entrada>) sesion.createQuery("from Entrada where id_usuario=" + idUsuario).list();
        } finally {
            sesion.close();
        }
        return lista;
    }

    public void guardar(Entrada nuevo) {
        try {
            iniciaOperacion();
            sesion.save(nuevo);
            tx.commit();
        } catch (HibernateException e) {
            manejaExcepcion(e);
            throw e;
        } finally {
            sesion.close();
        }
    }

    public void borrar(Entrada entrada) {
        try {
            iniciaOperacion();
            sesion.delete(entrada);
            tx.commit();
        } catch (HibernateException e) {
            manejaExcepcion(e);
            throw e;
        }
    }
  public void actualizaEntrada(Entrada entradaAActualizar) {
        try {
            iniciaOperacion();
            sesion.update(entradaAActualizar);
            tx.commit();
        } catch (HibernateException e) {
            manejaExcepcion(e);
            throw e;
        }
    }

    public void borrarReferenciasPorUsuario(int idUsuario) {
        try {
            iniciaOperacion();
            String hqlDelete = "delete From Entrada Where id_usuario = " + idUsuario;
            sesion.createQuery(hqlDelete).executeUpdate();
            tx.commit();
        } catch (HibernateException e) {
            manejaExcepcion(e);
            throw e;
        }
    }
    public void borrarReferenciasPorCombate(int idCombate) {
        try {
            iniciaOperacion();
            String hqlDelete = "delete From Entrada Where id_combate = " + idCombate;
            sesion.createQuery(hqlDelete).executeUpdate();
            tx.commit();
        } catch (HibernateException e) {
            manejaExcepcion(e);
            throw e;
        }
    }
    
}